package com.cdu.service.impl;

import com.cdu.commons.ServiceCode;
import com.cdu.mapper.SearchMapper;
import com.cdu.pojo.dto.SearchQueryDTO;
import com.cdu.pojo.vo.PageVO;
import com.cdu.pojo.vo.ProductVO;
import com.cdu.service.SearchService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SearchServiceImpl implements SearchService {

    @Autowired
    private SearchMapper searchMapper;

    /**
     * 根据关键字搜索商品并分页
     * @param searchQueryDTO 查询条件（包含分页参数）
     * @param keyword 搜索关键字
     * @return 包含分页信息和商品列表的结果
     */
    @Override
    public PageVO<ProductVO> searchProducts(SearchQueryDTO searchQueryDTO, String keyword) {
        if (keyword == null || keyword.isEmpty()) {
            throw new SecurityException("搜索内容不能为空, " + ServiceCode.SEARCH_IS_NULL);
        }

        // 设置分页参数
        PageHelper.startPage(searchQueryDTO.getPageNum(), searchQueryDTO.getPageSize());

        // 查询商品列表
        List<ProductVO> productList = searchMapper.searchProductByName(keyword);

        // 使用 PageInfo 封装分页信息
        PageInfo<ProductVO> pageInfo = new PageInfo<>(productList);

        // 将分页信息封装到 PageVO 返回
        PageVO<ProductVO> pageVO = new PageVO<>();
        pageVO.setTotal(pageInfo.getTotal()); // 总记录数
        pageVO.setPageNum(pageInfo.getPageNum()); // 当前页码
        pageVO.setPageSize(pageInfo.getPageSize()); // 每页大小
        pageVO.setPages(pageInfo.getPages()); // 总页数
        pageVO.setPageData(productList); // 当前页数据
        return pageVO;
    }
}
